package demo01_basicGrammer

object Demo02_string {

  def main(args: Array[String]): Unit = {

    //1.三个引号定义的字符串，表示完全原样输出，包括特殊字符
    val str1:String =
      """
        |select *
        |from emp
        |left join
        |""".stripMargin

    //2.字符串的复制,乘号的后面必须是整型
    val str2 = "我能行！ "
    println(str2*10)

    //3.字符串内插 可以进行简单计算，也可以写复杂的语句
    val PI = 3.141593653
    println("PI="+PI)
    println(s"PI=${PI}")
    println(s"PI=${PI*2}")
    println(s"PI=${
      val PI1=3.14
      val PI2=4.56
      PI1*2
      PI2+PI1*2
    }")

    //3.1 保留n为小数
    println(f"${PI}%.2f")
    //3.2 保留字符串的前n个字符
    println(f"${"successful"}%.4s")


    //表达式：是有返回值的代码单元
    //表达式块：如果一句执行不能完成返回，就需要表达式块
    //表达式块内的最后一句话作为这个块的返回值
    val numberOld = 100
    val number = {
      val n1=10
      val n2=10
      n1*n2
      n1+n2
    }
    println(number)

    /**
     * 2.元组
     *  数组：盛放一组相同类型数据的容器 特点：长度固定，内容可以改变
     *  元组：盛放一组任意类型数据的容器 特点：长度固定，内容也固定
     *       元素的个数最少是两个，最多是22个
     */
    val tuple:(Int,Double,Boolean,String,(Int,Int,String)) = (1,3.14,true,"hello",(3,2,"world"))
    println(tuple.getClass)
    //获取元组中的某个元素 元组变量名._n(n从1开始)
    println(tuple._5._2)

    //两个元素的元组除了可以表示正常的两个元素以外，还可以表示一个键值对，叫做 二元组
    val tuple2: (String, String) = ("name", "tom")
    //二元组的另一种表现形式，完全等价
    val tuple2_1 = "name" -> "tom"
    //简单验证二元组就是键值对
    val tuple2_2 = "information" -> "name" -> "tom"

    println(tuple2)
    println(tuple2_1)
    println(tuple2_2)



  }

}
